package com.qys.livesMall.anchor.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qys.livesMall.anchor.model.dto.H2AnchorEditDTO;
import com.qys.livesMall.anchor.model.entity.AnchorRewardConfig;
import com.qys.livesMall.anchor.model.entity.H2Anchor;
import com.qys.livesMall.anchor.model.vo.AnchorIncomeInformationVO;
import com.qys.livesMall.anchor.model.vo.AppAnchorVO;
import com.qys.livesMall.anchor.model.vo.H2AnchorVO;
import com.qys.livesMall.anchor.model.vo.lives.app.SettlementDataVO;
import com.qys.livesMall.framework.view.BaseQuery;

import java.math.BigDecimal;
import java.util.List;

/**
 * 主播表(H2Anchor)表服务接口
 *
 * @author makejava
 * @since 2023-06-17 09:35:51
 */
public interface H2AnchorService extends IService<H2Anchor> {

    /**
     * 查询主播列表（首页）
     * @param dto 查询dto
     * @return 主播列表
     */
    IPage<AppAnchorVO> anchorList(BaseQuery dto);

    /**
     * 查询主播个人信息
     * @param userId 用户ID
     * @return
     */
    AppAnchorVO getAnchorInfo(Long userId);

    void addAnchors(List<H2Anchor> anchors);

    List<Long> existAnchorByUserIds(List<Long> userIds);


    /**
     * 查询主播个人信息
     * @param userId 用户ID
     * @return
     */
    H2Anchor checkAnchorsAndReturn(Long userId);

    /**
     * 主播信息编辑
     * @param dto
     * @return
     */
    boolean edit(H2AnchorEditDTO dto);

    /**
     * 全部的主播
     * @return
     */
    List<H2Anchor> getALl();

    /**
     * 发送邮件
     * @param emailAddress
     * @return
     */
    void sendMail(String emailAddress);

    /**
     * 主播收益统计
     * @param userId 用户id
     * @return
     */
    AnchorIncomeInformationVO incomeInformation(Long userId);

    /**
     * 直播总收益（底薪、礼物、带货提成）
     * @param userId
     * @return
     */
    BigDecimal totalLiveRevenue(Long userId);

    /**
     * 匹配直播累计收益奖励（收益到达某阶段进行现金奖励）
     * @param userId 用户id
     * @return
     */
    AnchorRewardConfig cumulativeIncomeBonus(Long userId);

    /**
     * 保存收益奖励记录
     * @param conId  奖励配置id
     * @param userId 用户id
     */
    void keepRewardRecords(Long conId, Long userId);

    /**
     * 主播带货任务详情
     * @param userId 用户id
     * @param anchorSellTaskId 主播带货任务id
     * @return
     */
    SettlementDataVO salesMissionDetails(Long userId, Long anchorSellTaskId);

    /**
     * 主播带货主播
     * @param id
     * @return
     */
    H2AnchorVO sellingInformation(Long id);

    /**
     * 主播收益排名日、月奖励
     * @param type  5:日奖励，6:月奖励
     */
    void incomeRankingAward(int type);
}

